package ar.com.quickmart.connectivity;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;

import android.text.format.DateFormat;
import android.util.Log;
import ar.com.quickmart.classes.Branch;
import ar.com.quickmart.classes.ComparedPrices;
import ar.com.quickmart.classes.HistoryList;
import ar.com.quickmart.classes.Product;
import ar.com.quickmart.classes.Promo;
import ar.com.quickmart.classes.Purchasable;
import ar.com.quickmart.classes.QuickMartList;
import ar.com.quickmart.classes.Supermarket;
import ar.com.quickmart.utils.Utils;

public class WebServiceList extends WebServiceBase {

	public static List<Purchasable> getListProducts(String user, String list) throws Exception {
		
		// Variables propias del webservice
		String methodName = "getListItems";
		String param1 = "userName";
		String param2 = "listName";
		Object callResult;
	
		// Variables
		List<Purchasable> purchasablesList = new ArrayList<Purchasable>();
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(user);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listNameParameter = new PropertyInfo();
        listNameParameter.setName(param2);
        listNameParameter.setValue(list);
        listNameParameter.setType(String.class);
	    
        try {
        	
        	// Obtengo el resultado
        	callResult = callWebService(methodName, userParameter, listNameParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		
        		// Hago cast
        		// FIXME ver si esto es seguro !!!!!!!!!!!!!!!
        		List<SoapObject> result = (List<SoapObject>) callResult;
        		
        		// Parseo y agrego cada elemento a la lista
        		for(SoapObject item : result) {
        			
        			// TODO Verificar tipo de alguna manera !!!!!!!!!!!
        			// TODO Por ahora, solo agrego productos porque el WS asi lo hace
        			
        			// Obntego datos del producto/promocion
        			long code = Long.parseLong(item.getProperty("code").toString());
        			String name = item.getProperty("description").toString();
        			float price = Float.parseFloat(item.getProperty("price").toString());
        			int count = Integer.parseInt(item.getProperty("count").toString());
        			
        			// Si es producto
        			if(Utils.isProduct(code)) {
        				// Creo el producto y lo agrego a la lista
            			Product product = new Product(name, price, code, count);
            			purchasablesList.add(product);
        			}
        			else { // Es promocion
        				
        				// Creo la promo y la agrego a la lista
        				Promo promo = new Promo(code, name, null, price, count, null);
        				purchasablesList.add(promo);
        			}
        				
        		}
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return purchasablesList;
	}

	public static List<String> getLists(String user) throws Exception {
		
		// Variables propias del webservice
		String methodName = "getListsNames";
		String param1 = "userName";
		Object callResult;
	
		// Variables
		List<String> listsNames = new ArrayList<String>();
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(user);
        userParameter.setType(String.class);
	    
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		
        		// Hago cast
        		// FIXME ver si esto es seguro !!!!!!!!!!!!!!!
        		//List<SoapPrimitive> result = (List<SoapPrimitive>) callResult;
        		
        		// Si obtengo una unica lista
        		if(callResult.getClass() == SoapPrimitive.class) {
        			
        			// Agrego ese nombre a la lista
        			listsNames.add(((SoapPrimitive) callResult).toString());
        		}
        		// Si son varias listas
        		else if(callResult.getClass() == java.util.ArrayList.class) {
        			
        			List<SoapPrimitive> result = (List<SoapPrimitive>) callResult;
            		
            		// Parseo y agrego cada elemento a la lista
            		for(SoapPrimitive item : result) {
            			
            			// TODO Verificar tipo de alguna manera !!!!!!!!!!!
            			// TODO Por ahora, solo agrego productos porque el WS asi lo hace
            			        			
            			// Creo el producto y lo agrego a la lista
            			listsNames.add(item.toString());        			
            		}
        		}
        		else {
        			listsNames.add("Vacia: recibo " + callResult.getClass().toString());
        		}
        		
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return listsNames;
		
	}
	
	public static boolean addProductToList(String userName, String listName, long barcode, int count) throws Exception {
		
		// Variables propias del webservice
		String methodName = "addProductToList";
		String param1 = "userName";
		String param2 = "listName";
		String param3 = "barCode";
		String param4 = "count";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        // Creo el parametro con el codigo de barras
        PropertyInfo barCodeParameter = new PropertyInfo();
        barCodeParameter.setName(param3);
        barCodeParameter.setValue(barcode);
        barCodeParameter.setType(Long.class);
        
        // Creo el parametro con la cantidad
        PropertyInfo countParameter = new PropertyInfo();
        countParameter.setName(param4);
        countParameter.setValue(count);
        countParameter.setType(Integer.class);        
	    
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listParameter,
        											barCodeParameter,
        											countParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}

	public static boolean removeProductFromList(String userName, String listName, Long barCode) throws Exception {

		// Variables propias del webservice
		String methodName = "removeProductFromList";
		String param1 = "userName";
		String param2 = "listName";
		String param3 = "barCode";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        // Creo el parametro con el codigo de barras
        PropertyInfo barCodeParameter = new PropertyInfo();
        barCodeParameter.setName(param3);
        barCodeParameter.setValue(barCode);
        barCodeParameter.setType(Long.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listParameter,
        											barCodeParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}

	public static boolean createList(String userName, String listName) throws Exception {
		
		// Variables propias del webservice
		String methodName = "createList";
		String param1 = "userName";
		String param2 = "listName";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}
	
	public static boolean changeListName(String userName, String listName, String newListName) throws Exception {
		
		// Variables propias del webservice
		String methodName = "changeListName";
		String param1 = "userName";
		String param2 = "listName";
		String param3 = "newListName";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listNameParameter = new PropertyInfo();
        listNameParameter.setName(param2);
        listNameParameter.setValue(listName);
        listNameParameter.setType(String.class);
        
        // Creo parametro con el nuevo nombre de la lista
        PropertyInfo newListNameParameter = new PropertyInfo();
        newListNameParameter.setName(param3);
        newListNameParameter.setValue(newListName);
        newListNameParameter.setType(String.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listNameParameter,
        											newListNameParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}

	public static boolean copyList(String userName, String listName, String newListName) throws Exception {
		
		// Variables propias del webservice
		String methodName = "cloneList";
		String param1 = "userName";
		String param2 = "listName";
		String param3 = "newListName";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listNameParameter = new PropertyInfo();
        listNameParameter.setName(param2);
        listNameParameter.setValue(listName);
        listNameParameter.setType(String.class);
        
        // Creo parametro con el nuevo nombre de la lista
        PropertyInfo newListNameParameter = new PropertyInfo();
        newListNameParameter.setName(param3);
        newListNameParameter.setValue(newListName);
        newListNameParameter.setType(String.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listNameParameter,
        											newListNameParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}
	
	public static boolean removeList(String userName, String listName) throws Exception {

		// Variables propias del webservice
		String methodName = "removeList";
		String param1 = "userName";
		String param2 = "listName";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
		
	}
	
	public static List<HistoryList> getHistoryLists(String username) throws Exception {
		
		// Variables propias del webservice
		String methodName = "getHistoryLists";
		String param1 = "userName";
		Object callResult;
	
		// Variables
		List<HistoryList> historyLists = new ArrayList<HistoryList>();
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(username);
        userParameter.setType(String.class);
	    
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		
        		// Si obtengo una unica lista
        		if(callResult.getClass() == SoapObject.class) {
        			
        			SoapObject object = (SoapObject) callResult;
        			HistoryList list = new HistoryList();
        			
        			list = parseObjectToHistoryList(object);
        			
        			// Agrego ese nombre a la lista
        			historyLists.add(list);
        		}
        		// Si son varias listas
        		else if(callResult.getClass() == java.util.ArrayList.class) {
        			
        			List<SoapObject> result = (List<SoapObject>) callResult;
            		
            		// Parseo y agrego cada elemento a la lista
            		for(SoapObject item : result) {
            			historyLists.add(parseObjectToHistoryList(item));        			
            		}
        		}        		
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return historyLists;
		
	}

	private static HistoryList parseObjectToHistoryList(SoapObject object) {
		HistoryList list = new HistoryList();
		
		list.setListId(Long.parseLong(object.getPropertyAsString("id")));
		list.setListName(object.getPropertyAsString("name"));
		list.setTotalToPay(Float.parseFloat(object.getPropertyAsString("totalToPay")));
		String dateString = object.getProperty("confirmationDate").toString();
		String pattern = "yyyy-MM-dd'T'HH:mm:ssZ";
		
		Log.d("WS", dateString);
		
		SimpleDateFormat parser = new SimpleDateFormat(pattern, Locale.getDefault());
		Date date = new Date();
		try {
			date = parser.parse(dateString);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		list.setConfirmationDate(date);
		list.setState(object.getPropertyAsString("state"));
		// list.setUserName(object.getPropertyAsString("userName"));
		
		return list;		
	}
	
	public static List<Purchasable> getHistoryListItems(String user, String list) throws Exception {
		
		// Variables propias del webservice
		String methodName = "getHistoryListItems";
		String param1 = "userName";
		String param2 = "listName";
		Object callResult;
	
		// Variables
		List<Purchasable> purchasablesList = new ArrayList<Purchasable>();
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(user);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listNameParameter = new PropertyInfo();
        listNameParameter.setName(param2);
        listNameParameter.setValue(list);
        listNameParameter.setType(String.class);
	    
        try {
        	
        	// Obtengo el resultado
        	callResult = callWebService(methodName, userParameter, listNameParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		
        		// Hago cast
        		// FIXME ver si esto es seguro !!!!!!!!!!!!!!!
        		List<SoapObject> result = (List<SoapObject>) callResult;
        		
        		// Parseo y agrego cada elemento a la lista
        		for(SoapObject item : result) {
        			
        			// TODO Verificar tipo de alguna manera !!!!!!!!!!!
        			// TODO Por ahora, solo agrego productos porque el WS asi lo hace
        			
        			// Obntego datos del producto/promocion
        			long code = Long.parseLong(item.getProperty("code").toString());
        			String name = item.getProperty("description").toString();
        			float price = Float.parseFloat(item.getProperty("price").toString());
        			int count = Integer.parseInt(item.getProperty("count").toString());
        			
        			// Si es producto
        			if(Utils.isProduct(code)) {
        				// Creo el producto y lo agrego a la lista
            			Product product = new Product(name, price, code, count);
            			purchasablesList.add(product);
        			}
        			else { // Es promocion
        				
        				// Creo la promo y la agrego a la lista
        				Promo promo = new Promo(code, name, null, price, count, null);
        				purchasablesList.add(promo);
        			}
        				
        		}
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return purchasablesList;
	}
	
	public static boolean purchaseList(String userName, String listName) throws Exception {
		
		// Variables propias del webservice
		String methodName = "purchaseList";
		String param1 = "userName";
		String param2 = "listName";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}
	
	public static List<QuickMartList> getQuickMartLists(String userName, boolean reqSuperMarketAsociated) throws Exception {
		// Variables propias del webservice
			String methodName = "getQuickMartLists";
			String param1 = "userName";
			String param2 = "reqSuperMarketAsociated";
			Object callResult;
			List<QuickMartList> lists = new ArrayList<QuickMartList>();
			
			// Creo parametro con el nombre de usuario
	        PropertyInfo userParameter = new PropertyInfo();
	        userParameter.setName(param1);
	        userParameter.setValue(userName);
	        userParameter.setType(String.class);
	        
	        // Creo parametro con el nombre de la lista
	        PropertyInfo listParameter = new PropertyInfo();
	        listParameter.setName(param2);
	        listParameter.setValue(reqSuperMarketAsociated);
	        listParameter.setType(Boolean.class);
	        
	        try {
	        	
	        	// Obtengo el resultado y lo convierto a string
	        	callResult = callWebService(methodName, userParameter, listParameter);
	        	
	        	// Si obtuve la lista
	        	if(callResult != null) {
	        		List<SoapObject> result = (List<SoapObject>) callResult;
	        		
	        		// Parseo y agrego cada elemento a la lista
	        		for(SoapObject item : result) {

	        			QuickMartList list = new QuickMartList();
	        			
	        			long id = Long.parseLong(item.getProperty("id").toString());
	        			String name = item.getProperty("name").toString();
	        			boolean hasPromotions = Boolean.parseBoolean(item.getProperty("hasPromotions").toString());
	        			
	            		list.setId(id);
	            		list.setName(name);
	            		list.setHasPromotions(hasPromotions);
	            		
	            		Log.d("Recibido", item.toString());
	            		
	            		try
	            		{	
	            			SoapObject branch = (SoapObject) item.getProperty("branch");
	            			
	            			long branchId = Long.parseLong(branch.getProperty("id").toString());        			        			
	            			String address = branch.getProperty("address").toString();
	            			
	            			String supermarketName = ((SoapObject)branch.getProperty("superMarket")).getProperty("name").toString();
	            			long supermarketId = Long.parseLong(((SoapObject)branch.getProperty("superMarket")).getProperty("id").toString());
	            			
	            			Supermarket supermarket = new Supermarket(supermarketId, supermarketName, "");
	            			
	            			Branch branchToAdd = new Branch(branchId, address, "", "");
	            			branchToAdd.setSupermarket(supermarket);
	            			list.setBranch(branchToAdd);
	            		}
	            		catch(Exception ex) {
	            			// Log.d("Excepcion con la lista", list.getName() + ": " + ex.getMessage());
	            		}
	            		
	            		lists.add(list);
	            		
	        		}
	        	}
	        }
	        catch (Exception ex) {
	        	ex.printStackTrace();
	        	
	        	throw ex;
	        }
	        
	        return lists;
	}
	
	public static List<ComparedPrices> getComparedPrices(String userName, String listName) throws Exception {
		
		// Variables propias del webservice
		String methodName = "comparePrices";
		String param1 = "userName";
		String param2 = "listName";
		Object callResult;
		List<ComparedPrices> prices = new ArrayList<ComparedPrices>();
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter, listParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		List<SoapObject> result = (List<SoapObject>) callResult;
        		
        		// Parseo y agrego cada elemento a la lista
        		for(SoapObject item : result) {
        			
        			ComparedPrices price = new ComparedPrices();
        			
        			price.setTotal(Float.valueOf(item.getProperty("total").toString()));
        			
        			SoapObject supermarketObject = (SoapObject) item.getProperty("superMarket");
        			Supermarket supermarket = new Supermarket(Long.parseLong(supermarketObject.getProperty("id").toString()),
        														supermarketObject.getProperty("name").toString(),
        														supermarketObject.getProperty("url").toString());
        			price.setSuperMarket(supermarket);
        			
        			prices.add(price);        			
        		}
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return prices;
	}
	
	public static List<Product> getPromotionProducts(long promotionId) throws Exception {
		
		// Variables propias del webservice
		String methodName = "getPromotionProducts";
		String param1 = "promotionId";
		Object callResult;
	
		// Variables
		List<Product> productsList = new ArrayList<Product>();
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(promotionId);
        userParameter.setType(Long.class);

        try {
        	
        	// Obtengo el resultado
        	callResult = callWebService(methodName, userParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		
        		// Hago cast
        		// FIXME ver si esto es seguro !!!!!!!!!!!!!!!
        		List<SoapObject> result = (List<SoapObject>) callResult;
        		
        		// Parseo y agrego cada elemento a la lista
        		for(SoapObject item : result) {

        			long code = Long.parseLong(item.getProperty("code").toString());
        			String name = item.getProperty("description").toString();
        			float price = Float.parseFloat(item.getProperty("price").toString());
        			int count = Integer.parseInt(item.getProperty("count").toString());
        			
        			Product product = new Product(name, price, code, count);
        			productsList.add(product);        				
        		}
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();        	
        	throw ex;
        }
        
        return productsList;
	}
	
	public static boolean addPromoToList(String userName, String listName, long code, int count) throws Exception {
		
		// Variables propias del webservice
		String methodName = "addPromotionToList";
		String param1 = "userName";
		String param2 = "listName";
		String param3 = "code";
		String param4 = "count";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        // Creo el parametro con el codigo de barras
        PropertyInfo codeParameter = new PropertyInfo();
        codeParameter.setName(param3);
        codeParameter.setValue(code);
        codeParameter.setType(Long.class);
        
        // Creo el parametro con la cantidad
        PropertyInfo countParameter = new PropertyInfo();
        countParameter.setName(param4);
        countParameter.setValue(count);
        countParameter.setType(Integer.class);        
	    
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listParameter,
        											codeParameter,
        											countParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}
	
	public static boolean removePromoFromList(String userName, String listName, Long barCode) throws Exception {
		// Variables propias del webservice
		String methodName = "removePromotionFromList";
		String param1 = "userName";
		String param2 = "listName";
		String param3 = "code";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listParameter = new PropertyInfo();
        listParameter.setName(param2);
        listParameter.setValue(listName);
        listParameter.setType(String.class);
        
        // Creo el parametro con el codigo de barras
        PropertyInfo codeParameter = new PropertyInfo();
        codeParameter.setName(param3);
        codeParameter.setValue(barCode);
        codeParameter.setType(Long.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listParameter,
        											codeParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	}
	
	public static boolean changePurchasableCount(String userName, String listName, long purchasableId, int newCount) throws Exception {
		
		// Variables propias del webservice
		String methodName = "changeCount";
		String param1 = "userName";
		String param2 = "listName";
		String param3 = "code";
		String param4 = "count";
		Object callResult;
		boolean result = false;
		
		// Creo parametro con el nombre de usuario
        PropertyInfo userParameter = new PropertyInfo();
        userParameter.setName(param1);
        userParameter.setValue(userName);
        userParameter.setType(String.class);
        
        // Creo parametro con el nombre de la lista
        PropertyInfo listNameParameter = new PropertyInfo();
        listNameParameter.setName(param2);
        listNameParameter.setValue(listName);
        listNameParameter.setType(String.class);
        
        // Creo parametro con el nuevo nombre de la lista
        PropertyInfo codeParameter = new PropertyInfo();
        codeParameter.setName(param3);
        codeParameter.setValue(purchasableId);
        codeParameter.setType(Long.class);
        
        // Creo parametro con el nuevo nombre de la lista
        PropertyInfo countParameter = new PropertyInfo();
        countParameter.setName(param4);
        countParameter.setValue(newCount);
        countParameter.setType(Integer.class);
        
        try {
        	
        	// Obtengo el resultado y lo convierto a string
        	callResult = callWebService(methodName, userParameter,
        											listNameParameter,
        											codeParameter,
        											countParameter);
        	
        	// Si obtuve la lista
        	if(callResult != null) {
        		result = Boolean.parseBoolean(callResult.toString());
        	}
        }
        catch (Exception ex) {
        	ex.printStackTrace();
        	
        	throw ex;
        }
        
        return result;
	} 
}



